Просторово-часова домовленість
Просторово-часова домовленість (англ. space–time, time–memory tradeoff, TMTO) — ситуація в інформатиці, коли можна зменшити використання пам'яті ціною вповільнення швидкості виконання програми (і, навпаки, можна зменшити час обчислення за рахунок використання більшого об'єму пам'яті).
Багато задач пошуку, таких як задача пакування рюкзака, задача про дискретний логарифм або задача обернення односторонньої функції, що розв'язуються, по суті, перебором, одночасно дозволяють використання так званих таблиць пошуку[1]. Ідея така: замість того, щоб, без використання додаткової пам'яті, перебрати всі можливі значення, зробити певні попередні обчислення і зберегти їх у таблиці, яку потім використовувати під час розв'язання задач.
Просторово-часову домовленість можна застосувати для проблем зберігання даних. Якщо дані зберігаються нестиснутими, це потребує більше простору, але менше часу порівняно зі стиснутим варіантом (через те, що стиснення зберігає простір, що займають дані, але потребує час для виконання алгоритму стиснення даних). Залежно від конкретного прикладу використання можна використати підхожий спосіб.
Збереження лише LaTeX-сирців і відтворення зображення кожний раз при запиті сторінки було б виграшем пам'яті за ціну збільшення часу обробки. Відтворення зображення при зміні сторінки і збереження його було б виграшем в швидкості обробки запитів за ціну пам'яті.
Більший розмір кода може призвести до швидшого виконання програми. коли застосовується розмотування циклу. Ця техніка для кожної ітерації циклу робить код довшим, але заощаджує час потрібний для стрибку назад на початок циклу наприкінці кожної ітерації.
В цьому розділі розглянемо класичний приклад використання підходу просторово-часової домовленості в криптографії — застосування таблиць пошуку в розв'язанні криптографічної проблеми обернення криптографічної геш-функції.
Криптоаналітичний перебір вимагає значних обчислювальних затрат. У випадку, якщо потрібне багаторазове злам криптосистеми, логічно було б заздалегідь виконати вичерпний перебір і зберігати обчислені значення в пам'яті. Тоді, в подальшому, можна здійснювати перебір практично миттєво.[2] Втім, цей метод не застосовується в дійсності через надвеликі затрати пам'яті.
1980, Мартін Геллман запропонував компромісний підхід до проблеми криптоаналізу, що дозволяв аналіз криптосистеми, яка мала ключів, за операцій, із затратами по пам'яті також [1]. Це стає можливим по тому, як одноразово буде виконане попереднє отримання можливих ключів, яке потребує операцій.
Ідея полягає в наступному.
Нехай в алгоритмі шифрування використовується одностороння функція . За властивостями односторонньої функції отримання використаного ключа по відомій парі — складна задача, в той час як обчислення функції від певного відкритого тектсу — проста.
Криптоаналітик застосовує атаку на основі підібраного відкритого тексту і отримує один шифротекст , відповідний відкритому тексту :
Задача — знайти ключ , за допомогою якого здійснювалось шифрування. Для цього треба знайти спосіб обчислення можливих ключів. Введемо функцію редукції , яка ставить у відповідність шифротексту деякий ключ (довжина ключа, як правило, менша довжини шифртексту, звідси й термін):
Обчислення функції редукції — проста операція. У випадку DES це редукція від 64 до 56 біт, така як відкидання останніх 8 біт шифротексту.
Функція ставить у відповідність ключу інший ключ . Якщо алгоритм шифрування безпечний, то також одностороння функція. Тепер ми можемо отримати як завгодно довгий ланцюжок ключів:
Для того, щоб побудувати таблицю пошуку, криптоаналітик вибирає випадкових елементів із простору ключів . З кожного ключа за описаним вище способом отримуємо ланцюжок ключів довжини . Останній елемент -го ланцюжку позначаємо як , тоді очевидно . В пам'ять записуємо лише початковий і кінцевий ключі кожного ланцюжка (пари сортуємо за кінцевим ключем). Таким чином, готова таблиця займає комірок пам'яті.
Утворення таблиці вимагає операцій.
По отриманні шифротексту кріптоаналітик може застосувати функцію редукції для отримання , тоді він може перевірити чи присутній серед . зберігаються відсортованими, отже ця операція займе , а з використанням геш-таблиці складність можна звести майже до константного часу.
Якщо не серед , тоді не в стовпчику . Якщо , тоді або має більш як один першовзір. Ми називатимемо таку ситуацію хибною тривогою (англ. false alarm). Якщо , тоді криптоаналітик обчислює і перевіряє чи це ключ, наприклад, через обчислення чи дешифрує він в . Всі проміжні стовпчики в таблиці були відкинуті для збереження пам'яті, тому криптоаналітик мусить почати в і переобчислити доки він не досягне .
Якщо не кінцева точка або сталась хибна тривога, криптоаналітик обчислює і перевіряє на кінцевість її. Якщо це не так, ключ не в стовпчику, якщо ж так, тоді криптоаналітик перевіряє чи ключ . І так далі до 0 стовпчика.
Віднайдення ключа таким чином займає ; нехтуючи логаріфмічним множником, маємо . При цьому затрати пам'яті на збереження таблиці становлять .
Якщо всі елементи в таблиці різні, тоді ймовірність успіху становить Але така ситуація не реалістична через можливість злиття ланцюжків. Якщо є випадковою функцією, що відображає множину в себе, і якщо ключ вибрали рівномірно випадково з цієї множини (втім якісна криптосистема повинна бути псевдовипадковим генератором), тоді ймовірність успіху можна обмежити знизу як
Оцінка цього виразу призводить до наступного висліду: добуток не варто брати більшим від інакше, швидко падає нижня межа ймовірності успіху.
За отримаємо
Криптоаналітик тепер може утворити не одну, а таблиць, в кожній він може вибрати свою функцію редукції (що дозволить уникнути злиття ланцюжків з різних таблиць). При цьому межа успішності розшифрування становитиме:
Очікувана кількість хибних тривог на таблицю обмежена
Вибрав , криптоаналітик отримає затрати по пам'яти і по часу (у кожній таблиці використана своя функція редукції, тому при розшифруванні необхідно отримувати свій ланцюжок для кожної таблиці) при ймовірності успіху близької до одиниці. Взяв , отримаємо потрібні затрати по часу і пам'яті.
- ↑ а б Martin E. Hellman. A Cryptanalytic Time-Memory Trade-Off. // Transactions on Information Theory. — July 1980. — № 4.
- ↑ Philippe Oechslin. Making a Faster Cryptanalytic Time-Memory Trade-Off. // ISBN 3-540-40674-3.
- Martin Hellman — A Cryptanalytic Time-Memory Trade-Off [Архівовано 4 березня 2016 у Wayback Machine.]
- Philippe Oechslin — Making a Faster Cryptanalytic Time-Memory Trade-Off [Архівовано 27 лютого 2012 у WebCite]
- Mark Stamp — Once Upon a Time-Memory Tradeoff. [Архівовано 5 жовтня 2021 у Wayback Machine.]